package br.com.lojapi.controle;

import br.com.lojapi.bean.Categoria;
import br.com.lojapi.bean.Cliente;
import br.com.lojapi.bean.Fabricante;
import br.com.lojapi.bean.Fornecedor;
import br.com.lojapi.bean.Produto;
import br.com.lojapi.dao.CategoriaDAOImp;
import br.com.lojapi.dao.ClienteDAOImp;
import br.com.lojapi.dao.FabricanteDAOImp;
import br.com.lojapi.dao.FornecedorDAOImp;
import br.com.lojapi.dao.ProdutoDAOImp;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Beto
 */
@WebServlet(name = "ProdutoServlet", urlPatterns = {"/produto_do"})
public class ProdutoServlet extends HttpServlet {

    private HttpServletRequest request;
    private HttpServletResponse response;
    private RequestDispatcher rd;
    private FornecedorDAOImp fornecedorDAO;
    private FabricanteDAOImp fabricanteDAO;
    private CategoriaDAOImp categoriaDAO;
    private Fabricante fabricante;
    private Produto produto;
    private Categoria categoria;
    private Fornecedor fornecedor;
    private ProdutoDAOImp produtoDAO;

    protected void processRequest() throws ServletException, IOException {
        String cmd = request.getParameter("cmd");
        switch (cmd) {
            case "salvar":
                salvar();
                break;
            case "pesquisaPorNome":
                pesquisaPorNome();
                break;
            case "alterar":
                alterar();
                break;
            case "excluir":
                excluir();
                break;
            case "carregaProduto":
                pesquisaProdutoPorId();
                break;
            case "ComboProduto":
                CarregaCombo();
                break;
        }
        rd.forward(request, response);
    }

    private void salvar() {
        carregaProduto();
        produtoDAO = new ProdutoDAOImp();
        try {
            produtoDAO.salvar(produto);
            request.setAttribute("msg", "Produto salvo com sucesso!");
            rd = request.getRequestDispatcher("index.jsp");
        } catch (Exception ex) {
            Logger.getLogger(ClienteServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
        request.setAttribute("msg", "Produto salvo com sucesso!");
        rd = request.getRequestDispatcher("/index.jsp");
    }

    private void carregaProduto() {
        produto = new Produto();
        Categoria categoria = new Categoria();
        Fornecedor fornecedor = new Fornecedor();
        Fabricante fabricante = new Fabricante();
        String id = request.getParameter("id");
        if (id != null) {
            produto.setId(Integer.parseInt(id));
        }
        produto.setNome(request.getParameter("nome"));
        produto.setMarca(request.getParameter("marca"));
        produto.setModelo(request.getParameter("modelo"));
        produto.setPrecoCusto(Double.parseDouble(request.getParameter("precoCusto")));
        produto.setPrecoVenda(Double.parseDouble(request.getParameter("precoVenda")));
        produto.setQuantidade(Integer.parseInt(request.getParameter("quantidade")));
        produto.setDescricao(request.getParameter("descricao"));
        categoria.setId(Integer.parseInt(request.getParameter("idCategoria")));
        produto.setCategoria(categoria);
        fornecedor.setId(Integer.parseInt(request.getParameter("idFornecedor")));
        produto.setFornecedor(fornecedor);
        fabricante.setId(Integer.parseInt(request.getParameter("idFabricante")));
        produto.setFabricante(fabricante);
    }

    private void alterar() {
        carregaProduto();
        produtoDAO = new ProdutoDAOImp();
        try {
            produtoDAO.alterar(produto);
            request.setAttribute("msg", "Produto alterado com sucesso !");
            rd = request.getRequestDispatcher("/index.jsp");
        } catch (Exception ex) {
            Logger.getLogger(ClienteServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    private void pesquisaProdutoPorId() {
        produtoDAO = new ProdutoDAOImp();
        int id = Integer.parseInt(request.getParameter("id"));
        try {
            produto = (Produto) produtoDAO.procurar(id);
            request.setAttribute("produto", produto);
            rd = request.getRequestDispatcher("altProduto.jsp");
        } catch (Exception ex) {
            Logger.getLogger(CategoriaServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void excluir() {
        int id = Integer.parseInt(request.getParameter("id"));
        produtoDAO = new ProdutoDAOImp();
        try {
            produtoDAO.excluir(id);
            rd = request.getRequestDispatcher("/index.jsp");
        } catch (Exception ex) {
            Logger.getLogger(ProdutoServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void pesquisaPorNome() {
        produtoDAO = new ProdutoDAOImp();
        try {
            String nome = request.getParameter("nome");
            List produtos = produtoDAO.pesquisaPorNome(nome);
            request.setAttribute("produtos", produtos);
            rd = request.getRequestDispatcher("/pesqProduto.jsp");
        } catch (Exception e) {
            System.out.println("Erro ao pesquisar produto " + e.getMessage());
        }
    }

    private void CarregaCombo() {
        categoriaDAO = new CategoriaDAOImp();
        fornecedorDAO = new FornecedorDAOImp();
        fabricanteDAO = new FabricanteDAOImp();
        try {
            List categorias = categoriaDAO.listar();
            List fornecedores = fornecedorDAO.listar();
            List fabricantes = fabricanteDAO.listar();
            request.setAttribute("categorias", categorias);
            request.setAttribute("fornecedores", fornecedores);
            request.setAttribute("fabricantes", fabricantes);
            rd = request.getRequestDispatcher("cadProduto.jsp");
        } catch (Exception e) {
            System.out.println("Erro ao carregar combo " + e.getMessage());
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.request = request;
        this.response = response;
        processRequest();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.request = request;
        this.response = response;
        processRequest();
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}